Ext.define('AxisElement', {
			extend : 'Ext.data.Model',
			fields : [{
						name : 'value',
						type : 'string'
					}, {
						name : 'label',
						type : 'string'
					}]
		});
/*
 * var axisElementStore = new Ext.data.Store({ model : 'AxisElement', proxy : {
 * type : 'ajax', url : 'AdventureAnalyzerServlet', reader : { type : 'json' } },
 * autoLoad : false });
 */

// settings tab : table row group zone
var as_axis0Panel = Ext.create('Ext.panel.Panel', {
	bodyPadding : 5,
	title : 'Axis(0) : COLUMNS',
	height : 90,
	layout : 'vbox',
	collapsible : true,
	items : [{
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_colGrpCombo1',
			fieldLabel : 'Level 1',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Date].[Calendar Year]",
							"label" : "Year"
						}, {
							"value" : "[Date].[Calendar Quarter of Year]",
							"label" : "Quarter"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			allowBlank : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_colGrpCombo1');
					var valsCombo = Ext.getCmp('as_colGrpValsCombo1');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_colGrpValsCombo1',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_colGrpVals1',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}, {
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_colGrpCombo2',
			fieldLabel : 'Level 2',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Date].[Calendar Quarter of Year]",
							"label" : "Quarter"
						}, {
							"value" : "[Date].[Month of Year]",
							"label" : "Month"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_colGrpCombo2');
					var valsCombo = Ext.getCmp('as_colGrpValsCombo2');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_colGrpValsCombo2',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_colGrpVals2',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}]
});

// settings tab : table column group zone
var as_axis1Panel = Ext.create('Ext.panel.Panel', {
	bodyPadding : 5,
	title : 'Axis(1) : ROWS',
	height : 90,
	layout : 'vbox',
	collapsible : true,
	items : [{
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_rowGrpCombo1',
			fieldLabel : 'Level 1',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Product].[Category]",
							"label" : "Product Category"
						}, {
							"value" : "[Product].[Subcategory]",
							"label" : "Product Sub Category"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			allowBlank : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_rowGrpCombo1');
					var valsCombo = Ext.getCmp('as_rowGrpValsCombo1');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_rowGrpValsCombo1',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			editable : false,
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_rowGrpVals1',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}, {
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_rowGrpCombo2',
			fieldLabel : 'Level 2',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Product].[Subcategory]",
							"label" : "Product Sub Category"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_rowGrpCombo2');
					var valsCombo = Ext.getCmp('as_rowGrpValsCombo2');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_rowGrpValsCombo2',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			editable : false,
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_rowGrpVals2',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}]
});

// settings tab : table pages group zone
var as_axis2Panel = Ext.create('Ext.panel.Panel', {
	bodyPadding : 5,
	title : 'Axis(2) : PAGES',
	height : 90,
	layout : 'vbox',
	collapsible : true,
	collapsed : true,
	items : [{
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_pageGrpCombo1',
			fieldLabel : 'Level 1',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Sales Channel].[Sales Channel]",
							"label" : "Sales Channel"
						}, {
							"value" : "[Sales Reason].[Sales Reason Type]",
							"label" : "Sales Reason Type"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			allowBlank : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_pageGrpCombo1');
					var valsCombo = Ext.getCmp('as_pageGrpValsCombo1');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_pageGrpValsCombo1',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			editable : false,
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_pageGrpVals1',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}, {
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_pageGrpCombo2',
			fieldLabel : 'Level 2',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Sales Reason].[Sales Reason Type]",
							"label" : "Sales Reason Type"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_pageGrpCombo2');
					var valsCombo = Ext.getCmp('as_pageGrpValsCombo2');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_pageGrpValsCombo2',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			editable : false,
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_pageGrpVals2',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}]
});

// settings tab : table sections group zone
var as_axis3Panel = Ext.create('Ext.panel.Panel', {
	bodyPadding : 5,
	title : 'Axis(3) : SECTIONS',
	height : 90,
	layout : 'vbox',
	collapsible : true,
	collapsed : true,
	items : [{
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_sectGrpCombo1',
			fieldLabel : 'Level 1',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Sales Territory].[Sales Territory Group]",
							"label" : "Sales Territory Group"
						}, {
							"value" : "[Sales Territory].[Sales Territory Country]",
							"label" : "Sales Territory Country"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			allowBlank : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_sectGrpCombo1');
					var valsCombo = Ext.getCmp('as_sectGrpValsCombo1');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_sectGrpValsCombo1',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			editable : false,
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_sectGrpVals1',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}, {
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 4,
			align : 'middle'
		},
		items : [{
			xtype : 'combo',
			id : 'as_sectGrpCombo2',
			fieldLabel : 'Level 2',
			labelAlign : 'right',
			store : {
				fields : ['value', 'label'],
				data : [{
							"value" : "[Sales Territory].[Sales Territory Country]",
							"label" : "Sales Territory Country"
						}]
			},
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			editable : false,
			listeners : {
				'select' : function() {
					var axisCombo = Ext.getCmp('as_sectGrpCombo2');
					var valsCombo = Ext.getCmp('as_sectGrpValsCombo2');
					valsCombo.clearValue();
					valsCombo.store.proxy.url = '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_AXISELMS&axis='
							+ axisCombo.getValue();
					valsCombo.store.load();
				}
			}
		}, {
			xtype : 'combo',
			id : 'as_sectGrpValsCombo2',
			store : new Ext.data.Store({
						model : 'AxisElement',
						proxy : {
							url : "",
							method : 'GET',
							type : 'ajax',
							reader : {
								type : 'json',
								root : 'rows'
							}
						},
						autoLoad : true
					}),
			editable : false,
			queryMode : 'local',
			displayField : 'label',
			valueField : 'value',
			multiSelect : true,
			width : 400,
			grow : true,
			growMax : 600
		}, {
			xtype : 'displayfield',
			id : 'as_sectGrpVals2',
			style : {
				'white-space' : 'nowrap'
			},
			value : ''
		}]
	}]
});

// settings tab : table cell zone
var as_resultPanel = Ext.create('Ext.panel.Panel', {
	bodyPadding : 5,
	title : 'Result',
	height : 65,
	width : '100%',
	layout : 'vbox',
	items : [{
		xtype : 'container',
		layout : {
			type : 'table',
			columns : 3,
			align : 'middle'
		},
		width : '100%',
		items : [{
					xtype : 'combo',
					id : 'as_reportTypeCombo',
					fieldLabel : 'Report Type',
					labelAlign : 'right',
					store : {
						fields : ['value', 'label'],
						data : [{
									"value" : "TABLE_REPORT",
									"label" : "Table Report"
								}, {
									"value" : "GRAPHIC_REPORT",
									"label" : "Graphic Report"
								}]
					},
					queryMode : 'local',
					displayField : 'label',
					valueField : 'value',
					editable : false,
					allowBlank : false
				}, {
					xtype : 'combo',
					id : 'as_cellResultCombo',
					fieldLabel : 'Cell Result',
					labelAlign : 'right',
					store : {
						fields : ['value', 'label'],
						data : [{
									"value" : "[Measures].[Order Quantity]",
									"label" : "Order Quantity"
								}, {
									"value" : "[Measures].[Sales Amount]",
									"label" : "Sales Amount"
								}, {
									"value" : "[Measures].[Average Sales Amount]",
									"label" : "Average Sales Amount"
								}, {
									"value" : "[Measures].[Gross Profit]",
									"label" : "Gross Profit"
								}]
					},
					queryMode : 'local',
					displayField : 'label',
					valueField : 'value',
					editable : false,
					allowBlank : false
				}, {
					xtype : 'combo',
					id : 'as_reportFormatCombo',
					fieldLabel : 'Report Format',
					labelAlign : 'right',
					store : {
						fields : ['value', 'label'],
						data : [{
									"value" : "extjs",
									"label" : "Ext-Js (HTML)"
								}, {
									"value" : "csv",
									"label" : "CSV File"
								}, {
									"value" : "xls",
									"label" : "Excel File"
								}, {
									"value" : "xml",
									"label" : "XML File"
								}]
					},
					queryMode : 'local',
					displayField : 'label',
					valueField : 'value',
					editable : false,
					allowBlank : false
				}]
	}]
});

// settings tab : action panel
var as_callBtnPanel = Ext.create('Ext.panel.Panel', {
	bodyPadding : 5,
	height : 65,
	title : 'Action',
	layout : {
		type : 'hbox',
		align : 'middle',
		pack : 'center'
	},
	items : [{
		xtype : 'button',
		text : 'Get Report',
		handler : function() {
			if (Ext.getCmp('as_reportFormatCombo').getValue() == "extjs") {
				if (Ext.getCmp('as_pageGrpCombo1').getValue() != null
						|| Ext.getCmp('as_pageGrpCombo2').getValue() != null
						|| Ext.getCmp('as_sectGrpCombo1').getValue() != null
						|| Ext.getCmp('as_sectGrpCombo2').getValue() != null) {

					var cfmMsg = 'The ext-js frontend for a multi-dimensional table (>= 3) is not implemented yet ! Only AXIS(0) and AXIS(1) will be taken into account ! Countinue ?';
					Ext.Msg.confirm('Attention !', cfmMsg, function(btn, text) {
								if (btn == 'yes') {
									Ext.getCmp('as_pageGrpCombo1').reset();
									Ext.getCmp('as_pageGrpCombo2').reset();
									Ext.getCmp('as_pageGrpValsCombo1').reset();
									Ext.getCmp('as_pageGrpValsCombo2').reset();
									Ext.getCmp('as_sectGrpCombo1').reset();
									Ext.getCmp('as_sectGrpCombo2').reset();
									Ext.getCmp('as_sectGrpValsCombo1').reset();
									Ext.getCmp('as_sectGrpValsCombo2').reset();

									sendReportRequest();
								}
							});
				} else {
					sendReportRequest();
				}
			} else if (Ext.getCmp('as_reportTypeCombo').getValue() == 'GRAPHIC_REPORT') {
				Ext.Msg.alert('Attention !',
						'Graphic report export is not implemented yet !');
			} else {
				sendReportRequest();
			}
		}
	}, {
		xtype : 'button',
		text : 'Reset',
		handler : function() {
			// Ext.Msg.alert('Information', '// TODO : Reset all value fields');
			Ext.getCmp('as_colGrpCombo1').reset();
			Ext.getCmp('as_colGrpCombo2').reset();
			Ext.getCmp('as_colGrpValsCombo1').reset();
			Ext.getCmp('as_colGrpValsCombo2').reset();
			Ext.getCmp('as_rowGrpCombo1').reset();
			Ext.getCmp('as_rowGrpCombo2').reset();
			Ext.getCmp('as_rowGrpValsCombo1').reset();
			Ext.getCmp('as_rowGrpValsCombo2').reset();
			Ext.getCmp('as_pageGrpCombo1').reset();
			Ext.getCmp('as_pageGrpCombo2').reset();
			Ext.getCmp('as_pageGrpValsCombo1').reset();
			Ext.getCmp('as_pageGrpValsCombo2').reset();
			Ext.getCmp('as_sectGrpCombo1').reset();
			Ext.getCmp('as_sectGrpCombo2').reset();
			Ext.getCmp('as_sectGrpValsCombo1').reset();
			Ext.getCmp('as_sectGrpValsCombo2').reset();
			Ext.getCmp('as_reportTypeCombo').reset();
			Ext.getCmp('as_cellResultCombo').reset();
			Ext.getCmp('as_reportFormatCombo').reset();
		}
	}]
});

var sendReportRequest = function() {
	var as_colGrpCombo1 = Ext.getCmp('as_colGrpCombo1');
	var as_colGrpCombo2 = Ext.getCmp('as_colGrpCombo2');
	var as_colGrpValsCombo1 = Ext.getCmp('as_colGrpValsCombo1');
	var as_colGrpValsCombo2 = Ext.getCmp('as_colGrpValsCombo2');
	var as_rowGrpCombo1 = Ext.getCmp('as_rowGrpCombo1');
	var as_rowGrpCombo2 = Ext.getCmp('as_rowGrpCombo2');
	var as_rowGrpValsCombo1 = Ext.getCmp('as_rowGrpValsCombo1');
	var as_rowGrpValsCombo2 = Ext.getCmp('as_rowGrpValsCombo2');
	var as_pageGrpCombo1 = Ext.getCmp('as_pageGrpCombo1');
	var as_pageGrpCombo2 = Ext.getCmp('as_pageGrpCombo2');
	var as_pageGrpValsCombo1 = Ext.getCmp('as_pageGrpValsCombo1');
	var as_pageGrpValsCombo2 = Ext.getCmp('as_pageGrpValsCombo2');
	var as_sectGrpCombo1 = Ext.getCmp('as_sectGrpCombo1');
	var as_sectGrpCombo2 = Ext.getCmp('as_sectGrpCombo2');
	var as_sectGrpValsCombo1 = Ext.getCmp('as_sectGrpValsCombo1');
	var as_sectGrpValsCombo2 = Ext.getCmp('as_sectGrpValsCombo2');
	var reportTypeCombo = Ext.getCmp('as_reportTypeCombo');
	var cellResultCombo = Ext.getCmp('as_cellResultCombo');
	var reportFormatCombo = Ext.getCmp('as_reportFormatCombo');

	var context = {};

	var axes = [];
	var colAxes = [];
	var rowAxes = [];
	var pageAxes = [];
	var sectAxes = [];
	axes.push(colAxes);
	axes.push(rowAxes);
	axes.push(pageAxes);
	axes.push(sectAxes);

	for (var i = 0; i < 2; i++) {
		var colGrpCombo = eval(('as_colGrpCombo' + (i + 1)));
		var colGrpComboVal = colGrpCombo.getValue();
		if (colGrpComboVal !== null) {
			var axis = {};
			axis.name = colGrpComboVal;
			axis.axis = i;
			axis.level = i + 1;
			axis.values = [];
			var colGrpValsCombo = eval(('as_colGrpValsCombo' + (i + 1)));
			var colGrpValsComboVal = colGrpValsCombo.getValue();
			if (colGrpValsComboVal !== null) {
				axis.values = colGrpValsComboVal;
			}
			colAxes.push(axis);
		}
	}

	for (var i = 0; i < 2; i++) {
		var rowGrpCombo = eval(('as_rowGrpCombo' + (i + 1)));
		var rowGrpComboVal = rowGrpCombo.getValue();
		if (rowGrpComboVal !== null) {
			var axis = {};
			axis.name = rowGrpComboVal;
			axis.axis = i;
			axis.level = i + 1;
			axis.values = [];
			var rowGrpValsCombo = eval(('as_rowGrpValsCombo' + (i + 1)));
			var rowGrpValsComboVal = rowGrpValsCombo.getValue();
			if (rowGrpValsComboVal !== null) {
				axis.values = rowGrpValsComboVal;
			}
			rowAxes.push(axis);
		}
	}

	for (var i = 0; i < 2; i++) {
		var pageGrpCombo = eval(('as_pageGrpCombo' + (i + 1)));
		var pageGrpComboVal = pageGrpCombo.getValue();
		if (pageGrpComboVal !== null) {
			var axis = {};
			axis.name = pageGrpComboVal;
			axis.axis = i;
			axis.level = i + 1;
			axis.values = [];
			var pageGrpValsCombo = eval(('as_pageGrpValsCombo' + (i + 1)));
			var pageGrpValsComboVal = pageGrpValsCombo.getValue();
			if (pageGrpValsComboVal !== null) {
				axis.values = pageGrpValsComboVal;
			}
			pageAxes.push(axis);
		}
	}

	for (var i = 0; i < 2; i++) {
		var sectGrpCombo = eval(('as_sectGrpCombo' + (i + 1)));
		var sectGrpComboVal = sectGrpCombo.getValue();
		if (sectGrpComboVal !== null) {
			var axis = {};
			axis.name = sectGrpComboVal;
			axis.axis = i;
			axis.level = i + 1;
			axis.values = [];
			var sectGrpValsCombo = eval(('as_sectGrpValsCombo' + (i + 1)));
			var sectGrpValsComboVal = sectGrpValsCombo.getValue();
			if (sectGrpValsComboVal !== null) {
				axis.values = sectGrpValsComboVal;
			}
			sectAxes.push(axis);
		}
	}

	var res = [];
	if (cellResultCombo.getValue() !== null)
		res.push(cellResultCombo.getValue());

	context.axesList = axes;
	context.results = res;
	if (reportTypeCombo.getValue() !== null)
		context.reportType = reportTypeCombo.getValue();

	context.reportFormat = reportFormatCombo.getValue();

	var ctxStr = Ext.JSON.encode(context);

	if (context.reportFormat == "extjs") {
		Ext.Ajax.request({
			url : '../AdventureAnalyzerServlet?serviceType=as&requestType=GET_REPORT',
			params : {
				"context" : ctxStr
			},
			success : function(response) {
				var table = eval('(' + response.responseText + ')');
				if (context.reportType == 'TABLE_REPORT') {
					var as_tableGrid = buildTableGrid(table);
					if (Ext.getCmp('as_tableGrid') != null)
						Ext.getCmp('asTab').remove('as_tableGrid');
					if (Ext.getCmp('as_graphicChart') != null)
						Ext.getCmp('asTab').remove('as_graphicChart');
					Ext.getCmp('asTab').add(as_tableGrid);
				} else if (context.reportType == 'GRAPHIC_REPORT') {
					var as_graphicChart = buildGraphicChart(table);
					if (Ext.getCmp('as_tableGrid') != null)
						Ext.getCmp('asTab').remove('as_tableGrid');
					if (Ext.getCmp('as_graphicChart') != null)
						Ext.getCmp('asTab').remove('as_graphicChart');
					Ext.getCmp('asTab').add(as_graphicChart);
				}

				// switch tab
				Ext.getCmp('allTabs').setActiveTab(1);
			}
		});
	} else if (context.reportFormat != null) {
		var manualForm = document.createElement('form');
		manualForm.method = 'post';
		manualForm.action = '../AdventureAnalyzerServlet';

		var svcTypeInput = document.createElement('input');
		svcTypeInput.type = 'hidden';
		svcTypeInput.name = 'serviceType';
		svcTypeInput.value = 'as';
		manualForm.appendChild(svcTypeInput);

		var reqTypeInput = document.createElement('input');
		reqTypeInput.type = 'hidden';
		reqTypeInput.name = 'requestType';
		reqTypeInput.value = 'GET_REPORT';
		manualForm.appendChild(reqTypeInput);

		var contextInput = document.createElement('input');
		contextInput.type = 'hidden';
		contextInput.name = 'context';
		contextInput.value = ctxStr;
		manualForm.appendChild(contextInput);

		manualForm.submit();
	}
}